package gui.principal;

import calculadora.Calculadora;
import calculadora.RenglonTrans;
import java.awt.Cursor;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedHashMap;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.util.CellReference;
import org.jdesktop.application.SingleFrameApplication;
import org.jdesktop.application.FrameView;
import salida.GeneraExcel;
import javax.xml.parsers.ParserConfigurationException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.HashMap;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import lectores.ExcelMalFormadoException;
import lectores.LectorConveniosPrimaPagada;
import lectores.LectorCondicionesBProduccion;
import lectores.parsersXLSX.XLSXException;
import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
import org.xml.sax.SAXException;

public class BonosProduccion_MultivaView extends FrameView {

  JFileChooser selectorDeArchivos = new JFileChooser();
  public File archivoCondiciones = null;
  public File archivoBaseDeDatos = null;
  int mesSeleccionado;
  Calculadora calculadora = null;
  //Lectores de archivos
  public static LectorCondicionesBProduccion lectorCondiciones = null;
  public static LectorConveniosPrimaPagada lectorConvenios = null;
  //Generador salidas: archivos Excel
  GeneraExcel generadorExcel = null;
  boolean lockGenerador = false;

  public BonosProduccion_MultivaView(SingleFrameApplication app) {
    super(app);
    initComponents();
    infoEstado.setText("");
    this.getFrame().setResizable(false);
    this.getFrame().addWindowListener(new java.awt.event.WindowAdapter() {

      public void windowClosing(java.awt.event.WindowEvent evt) {
        formWindowClosing(evt);
      }
    });
    mesSeleccionado = comboMes.getSelectedIndex();
  }

  private File exploraArchivos(boolean seBuscaBase) {
    if (seBuscaBase) {
      selectorDeArchivos.setFileFilter(new javax.swing.filechooser.FileFilter() {

        public boolean accept(File f) {
          return f.getName().toLowerCase().endsWith(".xls") || f.isDirectory()
                  || f.getName().toLowerCase().endsWith(".xlsx");
        }

        public String getDescription() {
          return "Archivo Microsoft Excel (.xls o .xlsx)";
        }
      });
    } else {
      selectorDeArchivos.setFileFilter(new javax.swing.filechooser.FileFilter() {

        public boolean accept(File f) {
          return f.getName().toLowerCase().endsWith(".xls") || f.isDirectory()
                  || f.getName().toLowerCase().endsWith(".xlsx");
        }

        public String getDescription() {
          return "Archivo Microsoft Excel (.xls o .xlsx)";
        }
      });
    }

    int resp = selectorDeArchivos.showOpenDialog(this.getFrame());
    if (resp == JFileChooser.APPROVE_OPTION) {
      return selectorDeArchivos.getSelectedFile();
    }
    return null;
  }

  private boolean validaCampos() {

    mesSeleccionado = comboMes.getSelectedIndex();
    if (mesSeleccionado == 0 || mesSeleccionado == -1) {
      JOptionPane.showMessageDialog(this.getFrame(), "¡Seleccione el mes a calcular!");
      return false;
    }

    if (archivoCondiciones == null) {
      if ("".equals(campoPathCondiciones.getText())) {
        JOptionPane.showMessageDialog(this.getFrame(), "¡Seleccione el archivo de Condiciones del Mes!");
        return false;
      } else {
        File archivo = new File(campoPathCondiciones.getText());
        if (!campoPathCondiciones.getText().toLowerCase().endsWith(".xls")
                || !campoPathCondiciones.getText().toLowerCase().endsWith(".xlsx")) {
          JOptionPane.showMessageDialog(this.getFrame(), "¡El archivo de Condiciones del Mes"
                  + "no es un archivo Excel (.xls o .xlsx)!");
          return false;
        }
        archivoCondiciones = archivo;
      }
    }

    if (archivoBaseDeDatos == null) {
      if ("".equals(campoPathBaseDeDatos.getText())) {
        JOptionPane.showMessageDialog(this.getFrame(), "¡Seleccione el archivo de Base de Datos!");
        return false;
      } else {
        File archivo = new File(campoPathBaseDeDatos.getText());
        if (!campoPathCondiciones.getText().toLowerCase().endsWith(".xls")
                || !campoPathCondiciones.getText().toLowerCase().endsWith(".xlsx")) {
          JOptionPane.showMessageDialog(this.getFrame(), "¡El archivo de Base de Datos de Convenios"
                  + "no es un archivo Excel (.xls o .xlsx)!");
          return false;
        }
        archivoCondiciones = archivo;
      }
    }

    return true;
  }

  private Statement iniciaSesionBase() throws SQLException {
    Connection conexion = DriverManager.getConnection("jdbc:hsqldb:bonos_produccion", "sa", "");
    Statement st = conexion.createStatement();
    return st;
  }

  private ArrayList<Integer> ordena(ArrayList<Integer> lista) {
    Collections.sort(lista);
    return lista;
  }

  /** This method is called from within the constructor to
   * initialize the form.
   * WARNING: Do NOT modify this code. The content of this method is
   * always regenerated by the Form Editor.
   */
  @SuppressWarnings("unchecked")
  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
  private void initComponents() {

    mainPanel = new javax.swing.JPanel();
    etiquetaTitulo = new javax.swing.JLabel();
    panelMes = new javax.swing.JPanel();
    etiquetaMes = new javax.swing.JLabel();
    comboMes = new javax.swing.JComboBox();
    checkBoxAjusteAnual = new javax.swing.JCheckBox();
    panelCondiciones = new javax.swing.JPanel();
    etiquetaCondiciones = new javax.swing.JLabel();
    campoPathCondiciones = new javax.swing.JTextField();
    botonExplorarCondiciones = new javax.swing.JButton();
    etiquetaEspecificaCondiciones = new javax.swing.JLabel();
    panelBaseDeDatos = new javax.swing.JPanel();
    etiquetaBaseDeDatos = new javax.swing.JLabel();
    botonExplorarBaseDeDatos = new javax.swing.JButton();
    etiquetaEspecificaBaseDDatos = new javax.swing.JLabel();
    campoPathBaseDeDatos = new javax.swing.JTextField();
    botonCalcular = new javax.swing.JButton();
    botonSalir = new javax.swing.JButton();
    infoEstado = new javax.swing.JLabel();

    mainPanel.setName("mainPanel"); // NOI18N

    org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(bonosproduccion_multiva.BonosProduccion_MultivaApp.class).getContext().getResourceMap(BonosProduccion_MultivaView.class);
    etiquetaTitulo.setFont(resourceMap.getFont("etiquetaTitulo.font")); // NOI18N
    etiquetaTitulo.setIcon(resourceMap.getIcon("etiquetaTitulo.icon")); // NOI18N
    etiquetaTitulo.setText(resourceMap.getString("etiquetaTitulo.text")); // NOI18N
    etiquetaTitulo.setName("etiquetaTitulo"); // NOI18N

    panelMes.setBorder(javax.swing.BorderFactory.createTitledBorder("1. Mes"));
    panelMes.setName("panelMes"); // NOI18N

    etiquetaMes.setFont(resourceMap.getFont("etiquetaMes.font")); // NOI18N
    etiquetaMes.setText(resourceMap.getString("etiquetaMes.text")); // NOI18N
    etiquetaMes.setName("etiquetaMes"); // NOI18N

    comboMes.setFont(resourceMap.getFont("comboMes.font")); // NOI18N
    comboMes.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Seleccione el mes...", "Enero", "Febrero", "Primer Trimestre", "Abril", "Mayo", "Segundo Trimestre", "Julio", "Agosto", "Tercer Trimestre", "Octubre", "Noviembre", "Cuarto Trimestre" }));
    comboMes.setName("comboMes"); // NOI18N

    checkBoxAjusteAnual.setFont(resourceMap.getFont("checkBoxAjusteAnual.font")); // NOI18N
    checkBoxAjusteAnual.setText(resourceMap.getString("checkBoxAjusteAnual.text")); // NOI18N
    checkBoxAjusteAnual.setName("checkBoxAjusteAnual"); // NOI18N
    checkBoxAjusteAnual.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        checkBoxAjusteAnualActionPerformed(evt);
      }
    });

    javax.swing.GroupLayout panelMesLayout = new javax.swing.GroupLayout(panelMes);
    panelMes.setLayout(panelMesLayout);
    panelMesLayout.setHorizontalGroup(
      panelMesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(panelMesLayout.createSequentialGroup()
        .addContainerGap()
        .addGroup(panelMesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
          .addGroup(panelMesLayout.createSequentialGroup()
            .addComponent(comboMes, javax.swing.GroupLayout.PREFERRED_SIZE, 181, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(18, 18, 18)
            .addComponent(checkBoxAjusteAnual))
          .addComponent(etiquetaMes))
        .addContainerGap(274, Short.MAX_VALUE))
    );
    panelMesLayout.setVerticalGroup(
      panelMesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(panelMesLayout.createSequentialGroup()
        .addComponent(etiquetaMes)
        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
        .addGroup(panelMesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
          .addComponent(comboMes, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
          .addComponent(checkBoxAjusteAnual))
        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );

    panelCondiciones.setBorder(javax.swing.BorderFactory.createTitledBorder("2. Condiciones del Mes"));
    panelCondiciones.setName("panelCondiciones"); // NOI18N

    etiquetaCondiciones.setFont(resourceMap.getFont("etiquetaMes.font")); // NOI18N
    etiquetaCondiciones.setText(resourceMap.getString("etiquetaCondiciones.text")); // NOI18N
    etiquetaCondiciones.setName("etiquetaCondiciones"); // NOI18N

    campoPathCondiciones.setName("campoPathCondiciones"); // NOI18N

    botonExplorarCondiciones.setFont(resourceMap.getFont("botonExplorarCondiciones.font")); // NOI18N
    botonExplorarCondiciones.setText(resourceMap.getString("botonExplorarCondiciones.text")); // NOI18N
    botonExplorarCondiciones.setName("botonExplorarCondiciones"); // NOI18N
    botonExplorarCondiciones.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        botonExplorarCondicionesActionPerformed(evt);
      }
    });

    etiquetaEspecificaCondiciones.setFont(resourceMap.getFont("etiquetaEspecificaCondiciones.font")); // NOI18N
    etiquetaEspecificaCondiciones.setText(resourceMap.getString("etiquetaEspecificaCondiciones.text")); // NOI18N
    etiquetaEspecificaCondiciones.setName("etiquetaEspecificaCondiciones"); // NOI18N

    javax.swing.GroupLayout panelCondicionesLayout = new javax.swing.GroupLayout(panelCondiciones);
    panelCondiciones.setLayout(panelCondicionesLayout);
    panelCondicionesLayout.setHorizontalGroup(
      panelCondicionesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(panelCondicionesLayout.createSequentialGroup()
        .addContainerGap()
        .addGroup(panelCondicionesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
          .addGroup(panelCondicionesLayout.createSequentialGroup()
            .addComponent(campoPathCondiciones, javax.swing.GroupLayout.PREFERRED_SIZE, 447, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(botonExplorarCondiciones, javax.swing.GroupLayout.PREFERRED_SIZE, 91, javax.swing.GroupLayout.PREFERRED_SIZE))
          .addComponent(etiquetaCondiciones, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
          .addComponent(etiquetaEspecificaCondiciones))
        .addContainerGap(34, Short.MAX_VALUE))
    );
    panelCondicionesLayout.setVerticalGroup(
      panelCondicionesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(panelCondicionesLayout.createSequentialGroup()
        .addGap(6, 6, 6)
        .addComponent(etiquetaCondiciones, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
        .addGroup(panelCondicionesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
          .addComponent(campoPathCondiciones, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
          .addComponent(botonExplorarCondiciones))
        .addGap(8, 8, 8)
        .addComponent(etiquetaEspecificaCondiciones)
        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );

    panelBaseDeDatos.setBorder(javax.swing.BorderFactory.createTitledBorder("3. Base de Datos (PPM)"));
    panelBaseDeDatos.setName("panelBaseDeDatos"); // NOI18N

    etiquetaBaseDeDatos.setFont(resourceMap.getFont("etiquetaMes.font")); // NOI18N
    etiquetaBaseDeDatos.setText(resourceMap.getString("etiquetaBaseDeDatos.text")); // NOI18N
    etiquetaBaseDeDatos.setName("etiquetaBaseDeDatos"); // NOI18N

    botonExplorarBaseDeDatos.setFont(resourceMap.getFont("botonExplorarBaseDeDatos.font")); // NOI18N
    botonExplorarBaseDeDatos.setText(resourceMap.getString("botonExplorarBaseDeDatos.text")); // NOI18N
    botonExplorarBaseDeDatos.setName("botonExplorarBaseDeDatos"); // NOI18N
    botonExplorarBaseDeDatos.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        botonExplorarBaseDeDatosActionPerformed(evt);
      }
    });

    etiquetaEspecificaBaseDDatos.setFont(resourceMap.getFont("etiquetaEspecificaCondiciones.font")); // NOI18N
    etiquetaEspecificaBaseDDatos.setText(resourceMap.getString("etiquetaEspecificaBaseDDatos.text")); // NOI18N
    etiquetaEspecificaBaseDDatos.setName("etiquetaEspecificaBaseDDatos"); // NOI18N

    campoPathBaseDeDatos.setName("campoPathBaseDeDatos"); // NOI18N

    javax.swing.GroupLayout panelBaseDeDatosLayout = new javax.swing.GroupLayout(panelBaseDeDatos);
    panelBaseDeDatos.setLayout(panelBaseDeDatosLayout);
    panelBaseDeDatosLayout.setHorizontalGroup(
      panelBaseDeDatosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(panelBaseDeDatosLayout.createSequentialGroup()
        .addContainerGap()
        .addGroup(panelBaseDeDatosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
          .addComponent(etiquetaBaseDeDatos, javax.swing.GroupLayout.PREFERRED_SIZE, 531, javax.swing.GroupLayout.PREFERRED_SIZE)
          .addGroup(panelBaseDeDatosLayout.createSequentialGroup()
            .addComponent(campoPathBaseDeDatos, javax.swing.GroupLayout.PREFERRED_SIZE, 447, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(botonExplorarBaseDeDatos, javax.swing.GroupLayout.PREFERRED_SIZE, 88, javax.swing.GroupLayout.PREFERRED_SIZE))
          .addComponent(etiquetaEspecificaBaseDDatos))
        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );
    panelBaseDeDatosLayout.setVerticalGroup(
      panelBaseDeDatosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(panelBaseDeDatosLayout.createSequentialGroup()
        .addContainerGap()
        .addComponent(etiquetaBaseDeDatos, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
        .addGroup(panelBaseDeDatosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
          .addComponent(campoPathBaseDeDatos, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
          .addComponent(botonExplorarBaseDeDatos))
        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
        .addComponent(etiquetaEspecificaBaseDDatos)
        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );

    botonCalcular.setFont(resourceMap.getFont("botonCalcular.font")); // NOI18N
    botonCalcular.setText(resourceMap.getString("botonCalcular.text")); // NOI18N
    botonCalcular.setName("botonCalcular"); // NOI18N
    botonCalcular.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        botonCalcularActionPerformed(evt);
      }
    });

    botonSalir.setFont(resourceMap.getFont("botonCalcular.font")); // NOI18N
    botonSalir.setText(resourceMap.getString("botonSalir.text")); // NOI18N
    botonSalir.setName("botonSalir"); // NOI18N
    botonSalir.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        botonSalirActionPerformed(evt);
      }
    });

    infoEstado.setFont(resourceMap.getFont("infoEstado.font")); // NOI18N
    infoEstado.setText(resourceMap.getString("infoEstado.text")); // NOI18N
    infoEstado.setName("infoEstado"); // NOI18N

    javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel);
    mainPanel.setLayout(mainPanelLayout);
    mainPanelLayout.setHorizontalGroup(
      mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addComponent(etiquetaTitulo, javax.swing.GroupLayout.DEFAULT_SIZE, 656, Short.MAX_VALUE)
      .addGroup(mainPanelLayout.createSequentialGroup()
        .addGap(29, 29, 29)
        .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
          .addGroup(mainPanelLayout.createSequentialGroup()
            .addComponent(infoEstado, javax.swing.GroupLayout.PREFERRED_SIZE, 92, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(269, 269, 269)
            .addComponent(botonCalcular, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(botonSalir, javax.swing.GroupLayout.PREFERRED_SIZE, 97, javax.swing.GroupLayout.PREFERRED_SIZE))
          .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
            .addComponent(panelBaseDeDatos, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addComponent(panelCondiciones, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(panelMes, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
        .addContainerGap(27, Short.MAX_VALUE))
    );
    mainPanelLayout.setVerticalGroup(
      mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(mainPanelLayout.createSequentialGroup()
        .addComponent(etiquetaTitulo, javax.swing.GroupLayout.PREFERRED_SIZE, 241, javax.swing.GroupLayout.PREFERRED_SIZE)
        .addGap(12, 12, 12)
        .addComponent(panelMes, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
        .addComponent(panelCondiciones, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
        .addGap(12, 12, 12)
        .addComponent(panelBaseDeDatos, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
        .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
          .addGroup(mainPanelLayout.createSequentialGroup()
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
            .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
              .addComponent(botonCalcular, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE)
              .addComponent(botonSalir, javax.swing.GroupLayout.DEFAULT_SIZE, 36, Short.MAX_VALUE)))
          .addGroup(mainPanelLayout.createSequentialGroup()
            .addGap(26, 26, 26)
            .addComponent(infoEstado, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)))
        .addContainerGap())
    );

    setComponent(mainPanel);
  }// </editor-fold>//GEN-END:initComponents

private void botonExplorarCondicionesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonExplorarCondicionesActionPerformed
  File archivoSeleccionado = exploraArchivos(false);
  if (archivoSeleccionado != null) {
    archivoCondiciones = archivoSeleccionado;
    campoPathCondiciones.setText(archivoCondiciones.getAbsolutePath());
  }
}//GEN-LAST:event_botonExplorarCondicionesActionPerformed

private void botonSalirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonSalirActionPerformed
  System.exit(0);
}//GEN-LAST:event_botonSalirActionPerformed

private void botonExplorarBaseDeDatosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonExplorarBaseDeDatosActionPerformed
  File archivoSeleccionado = exploraArchivos(true);
  if (archivoSeleccionado != null) {
    archivoBaseDeDatos = archivoSeleccionado;
    campoPathBaseDeDatos.setText(archivoBaseDeDatos.getAbsolutePath());
  }
}//GEN-LAST:event_botonExplorarBaseDeDatosActionPerformed

private void botonCalcularActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonCalcularActionPerformed
  if (!lockGenerador) {

    lockGenerador = true;
    botonCalcular.setEnabled(false);

    if (validaCampos()) {
      try {

        //Se le pide al usuario indicar donde se guardara el archivo de salida
        JOptionPane.showMessageDialog(this.getFrame(), "A continuación seleccione donde se guardará el archivo de salida...");
        JFileChooser salvarArchivo = new JFileChooser();
        int respuesta = salvarArchivo.showSaveDialog(getFrame());
        if (respuesta == JFileChooser.APPROVE_OPTION) {
          File archivoExcelSeleccionado = salvarArchivo.getSelectedFile();
          String pathName = archivoExcelSeleccionado.getPath();
          if (!pathName.endsWith(".xls")) {
            pathName = pathName + ".xls";
          }

          //Si el usuario eligio un archivo se comienza a procesar y se pone el cursos en wait                    
          mainPanel.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
          Statement st = iniciaSesionBase();

          lectorCondiciones = new LectorCondicionesBProduccion(archivoCondiciones);
          HashMap<String, Integer> mestrim = lectorCondiciones.getMesTrim();

          if (checkBoxAjusteAnual.isSelected()) {
            lectorConvenios = new LectorConveniosPrimaPagada(archivoBaseDeDatos, comboMes.getSelectedIndex(), lectores.LectorConvenios.FILTRO_BONOS_CALIDAD, st, mestrim);
            calculadora = new Calculadora(comboMes.getSelectedIndex(), lectores.LectorConvenios.FILTRO_BONOS_CALIDAD, mestrim);
          } else {
            lectorConvenios = new LectorConveniosPrimaPagada(archivoBaseDeDatos, comboMes.getSelectedIndex(), lectores.LectorConvenios.FILTRO_BONOS_PRODUCCION, st, mestrim);
            calculadora = new Calculadora(comboMes.getSelectedIndex(), lectores.LectorConvenios.FILTRO_BONOS_PRODUCCION, mestrim);
          }
          generadorExcel = new GeneraExcel(pathName);

          //Carga info Acumulado 1
          calculadora.ejecutaQueryAcuAgente1(st);
          calculadora.hazCalculosAgente1(st);
          calculadora.ejecutaQueryAcuProm1(st);
          calculadora.hazCalculosPromotor1(st);

          //Carga info Acumulado 2
          calculadora.ejecutaQueryAcuAgente2(st);
          calculadora.hazCalculosAgente2(st);
          calculadora.ejecutaQueryAcuProm2(st);
          calculadora.hazCalculosPromotor2(st);

          //Inicializa la salida
          generadorExcel.inicializaExcel();

          ArrayList llavesAgente1 = calculadora.getAcumuladoAgente1();
          LinkedHashMap<Integer, RenglonTrans> tablaAgente1 = calculadora.getTablaAgente1();
          ArrayList llavesPromotor1 = calculadora.getAcumuladoPromotor1();
          LinkedHashMap<Integer, RenglonTrans> tablaPromotor1 = calculadora.getTablaPromotor1();
          llavesAgente1 = ordena(llavesAgente1);
          llavesPromotor1 = ordena(llavesPromotor1);

          Iterator iteProm1 = llavesPromotor1.iterator();
          while (iteProm1.hasNext()) {
            RenglonTrans renglonActual = tablaPromotor1.get(iteProm1.next());
            String[] rengAct = renglonActual.getRenglones();
            generadorExcel.insertaRenglonAc1(rengAct);
          }

          Iterator iteAg1 = llavesAgente1.iterator();
          while (iteAg1.hasNext()) {
            RenglonTrans renglonActual = tablaAgente1.get(iteAg1.next());
            String[] rengAct = renglonActual.getRenglones();
            generadorExcel.insertaRenglonAc1(rengAct);
          }

          ArrayList llavesPromotor2 = calculadora.getAcumuladoPromotor2();
          LinkedHashMap<Integer, RenglonTrans> tablaPromotor2 = calculadora.getTablaPromotor2();

          ArrayList llavesAgente2 = calculadora.getAcumuladoAgente2();
          LinkedHashMap<Integer, RenglonTrans> tablaAgente2 = calculadora.getTablaAgente2();

          llavesAgente2 = ordena(llavesAgente2);
          llavesPromotor2 = ordena(llavesPromotor2);

          Iterator iteProm2 = llavesPromotor2.iterator();
          while (iteProm2.hasNext()) {
            RenglonTrans renglonActual = tablaPromotor2.get(iteProm2.next());
            String[] rengAct = renglonActual.getRenglones();
            generadorExcel.insertaRenglonAc2(rengAct);
          }

          Iterator iteAg2 = llavesAgente2.iterator();
          while (iteAg2.hasNext()) {
            RenglonTrans renglonActual = tablaAgente2.get(iteAg2.next());
            String[] rengAct = renglonActual.getRenglones();
            generadorExcel.insertaRenglonAc2(rengAct);
          }

          generadorExcel.inicializaHojaCalculo();
          generadorExcel.llenaHojaCalculo();
          generadorExcel.generaExcel();
          JOptionPane.showMessageDialog(this.getFrame(), "¡¡Archivo generado exitosamente!!");
        }

      } catch (FileNotFoundException fnfe) {
        JOptionPane.showMessageDialog(this.getFrame(), "<html><center>¡¡No se encontró alguno de los archivos especificados o tiene el archivo de salida abierto!!<br>"
                + "Revise y reintente.</center></html>");
      } catch (IOException ioe) {
        JOptionPane.showMessageDialog(this.getFrame(), "<html><center>¡¡Ocurrió un error al leer o escribir alguno de los archivos!!<br>"
                + "Revise y reintente.</center></html>");
      } catch (SQLException sqle) {
        JOptionPane.showMessageDialog(this.getFrame(), "<html><center>¡¡Hubo un problema al crear la base de datos!!<br>"
                + "Revise que solo haya una ejecución de este programa y reintente.</center></html>");
        sqle.printStackTrace();
      } catch (XLSXException xlsxex) {
      } catch (ExcelMalFormadoException emfe) {
        informaExcelMalFormado(emfe, this.getFrame());
      } catch (InvalidFormatException ife) {
        JOptionPane.showMessageDialog(this.getFrame(), "<html><center>¡¡Alguno de los archivos de Excel está dañado!!<br>"
                + "Revise y reintente.</center></html>");
      } catch (SAXException saxe) {
        saxe.printStackTrace();
        JOptionPane.showMessageDialog(this.getFrame(), "<html><center>¡¡Alguno de los archivos de Excel está dañado!!<br>"
                + "Revise y reintente.</center></html>");
      } catch (OpenXML4JException oxml4jex) {
        oxml4jex.printStackTrace();
        JOptionPane.showMessageDialog(this.getFrame(), "<html><center>¡¡Alguno de los archivos de Excel está dañado!!<br>"
                + "Revise y reintente.</center></html>");
      } catch (ParserConfigurationException pce) {
        pce.printStackTrace();
        JOptionPane.showMessageDialog(this.getFrame(), "<html><center>¡¡Alguno de los archivos de Excel está dañado!!<br>"
                + "Revise y reintente.</center></html>");
      } catch (Exception ex) {
        ex.printStackTrace();
        JOptionPane.showMessageDialog(this.getFrame(), "<html><center>¡¡Error inesperado!!<br>"
                + "Revise los archivos y reintente.</center></html>");
      }

    }
    mainPanel.setCursor(Cursor.getDefaultCursor());
    lockGenerador = false;
    botonCalcular.setEnabled(true);
    botonSalir.setText("Salir");
  }
}//GEN-LAST:event_botonCalcularActionPerformed

private void checkBoxAjusteAnualActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_checkBoxAjusteAnualActionPerformed
  comboMes.setSelectedIndex(-1);
  comboMes.setModel(new AjusteComboBoxModel(checkBoxAjusteAnual.isSelected()));
  comboMes.updateUI();
}//GEN-LAST:event_checkBoxAjusteAnualActionPerformed

  public static void informaExcelMalFormado(ExcelMalFormadoException emfe, JFrame frame) {
    if (emfe.getCodigoFallo() == ExcelMalFormadoException.DATO_INESPERADO) {
      switch (emfe.getColFallo()) {
        case 0:
          JOptionPane.showMessageDialog(frame, "<html><center>¡¡PERIODO ERRONEO O VACÍO!!<br>EL FORMATO ES: AAAA/MM<br>"
                  + "Renglon: " + (emfe.getRengFallo() + 1) + "<br>"
                  + "Columna: " + CellReference.convertNumToColString(emfe.getColFallo()) + "<br>"
                  + "En: " + emfe.getArchivoQueFallo().getName() + "<br>"
                  + "Revise y reintente.</center></html>");
          break;
        case 2:
          JOptionPane.showMessageDialog(frame, "<html><center>¡¡ID AGENTE ERRONEO O VACÍO!!<br>"
                  + "Renglon: " + (emfe.getRengFallo() + 1) + "<br>"
                  + "Columna: " + CellReference.convertNumToColString(emfe.getColFallo()) + "<br>"
                  + "En: " + emfe.getArchivoQueFallo().getName() + "<br>"
                  + "Revise y reintente.</center></html>");
          break;
        case 7:
          JOptionPane.showMessageDialog(frame, "<html><center>¡¡ID RAMO ERRONEO!!<br>"
                  + "Renglon: " + (emfe.getRengFallo() + 1) + "<br>"
                  + "Columna: " + CellReference.convertNumToColString(emfe.getColFallo()) + "<br>"
                  + "En: " + emfe.getArchivoQueFallo().getName() + "<br>"
                  + "Revise y reintente.</center></html>");
          break;
        case 12:
          JOptionPane.showMessageDialog(frame, "<html><center>¡¡ID PROMOTORIA ERRONEO O VACÍO!!<br>"
                  + "Renglon: " + (emfe.getRengFallo() + 1) + "<br>"
                  + "Columna: " + CellReference.convertNumToColString(emfe.getColFallo()) + "<br>"
                  + "En: " + emfe.getArchivoQueFallo().getName() + "<br>"
                  + "Revise y reintente.</center></html>");
          break;
        case 22:
          JOptionPane.showMessageDialog(frame, "<html><center>¡¡PRIMA PAGADA ERRONEA!!<br>"
                  + "Renglon: " + (emfe.getRengFallo() + 1) + "<br>"
                  + "Columna: " + CellReference.convertNumToColString(emfe.getColFallo()) + "<br>"
                  + "En: " + emfe.getArchivoQueFallo().getName() + "<br>"
                  + "Revise y reintente.</center></html>");
          break;
        case 37:
          JOptionPane.showMessageDialog(frame, "<html><center>¡¡SINIESTRO TOTAL ERRONEO!!<br>"
                  + "Renglon: " + (emfe.getRengFallo() + 1) + "<br>"
                  + "Columna: " + CellReference.convertNumToColString(emfe.getColFallo()) + "<br>"
                  + "En: " + emfe.getArchivoQueFallo().getName() + "<br>"
                  + "Revise y reintente.</center></html>");
          break;
        default:
          JOptionPane.showMessageDialog(frame, "<html><center>¡¡Dato inesperado!!<br>"
                  + "Renglon: " + (emfe.getRengFallo() + 1) + "<br>"
                  + "Columna: " + CellReference.convertNumToColString(emfe.getColFallo()) + "<br>"
                  + "En: " + emfe.getArchivoQueFallo().getName() + "<br>"
                  + "Revise y reintente.</center></html>");
          break;
      }
    } else if (emfe.getCodigoFallo() == ExcelMalFormadoException.FALTA_COLUMNA) {
      JOptionPane.showMessageDialog(frame, "<html><center>¡¡Falta una columna!!<br>"
              + "En: " + emfe.getArchivoQueFallo().getName() + "<br>"
              + "Revise y reintente.</center></html>");
    } else if (emfe.getCodigoFallo() == ExcelMalFormadoException.TIPO_INESPERADO) {
      JOptionPane.showMessageDialog(frame, "<html><center>¡¡Tipo inesperado en la celda!!<br>"
              + "Renglon: " + (emfe.getRengFallo() + 1) + "<br>"
              + "Columna: " + CellReference.convertNumToColString(emfe.getColFallo()) + "<br>"
              + "En: " + emfe.getArchivoQueFallo().getName() + "<br>"
              + "Revise y reintente.</center></html>");
    } else if (emfe.getCodigoFallo() == ExcelMalFormadoException.RENGLON_VACIO) {
      JOptionPane.showMessageDialog(frame, "<html><center>¡¡Hubo un renglon vacío!!<br>"
              + "Renglon: " + CellReference.convertNumToColString(emfe.getRengFallo()) + "<br>"
              + "En: " + emfe.getArchivoQueFallo().getName() + "<br>"
              + "Revise y reintente.</center></html>");
    } else if (emfe.getCodigoFallo() == ExcelMalFormadoException.MES_NO_ENCONTRADO) {
      JOptionPane.showMessageDialog(frame, "<html><center>¡¡No se encontraron registros del mes seleccionado!!<br>"
              + "En: " + emfe.getArchivoQueFallo().getName() + "<br>"
              + "Revise y reintente.</center></html>");
    }
    
    if (emfe.getCodigoFallo() == ExcelMalFormadoException.CONDICIONES) {
        int caso = emfe.getColFallo();
        if(caso >= 9 & caso < 22){
            caso = 9;
        }
      switch (caso) {
        case 0:
          JOptionPane.showMessageDialog(frame, "<html><center>¡¡TIPO ERRONEO O VACÍO!!<br>"
                  + "Renglon: " + (emfe.getRengFallo() + 1) + "<br>"
                  + "Columna: " + CellReference.convertNumToColString(emfe.getColFallo()) + "<br>"
                  + "En: " + emfe.getArchivoQueFallo().getName() + "<br>"
                  + "Revise y reintente.</center></html>");
          break;
        case 1:
          JOptionPane.showMessageDialog(frame, "<html><center>¡¡ID AGENTE ERRONEO O VACÍO!!<br>"
                  + "Renglon: " + (emfe.getRengFallo() + 1) + "<br>"
                  + "Columna: " + CellReference.convertNumToColString(emfe.getColFallo()) + "<br>"
                  + "En: " + emfe.getArchivoQueFallo().getName() + "<br>"
                  + "Revise y reintente.</center></html>");
          break;
        case 2:
          JOptionPane.showMessageDialog(frame, "<html><center>¡¡ID PROMOTORIA ERRONEO O VACÍO!!<br>"
                  + "Renglon: " + (emfe.getRengFallo() + 1) + "<br>"
                  + "Columna: " + CellReference.convertNumToColString(emfe.getColFallo()) + "<br>"
                  + "En: " + emfe.getArchivoQueFallo().getName() + "<br>"
                  + "Revise y reintente.</center></html>");
          break;
        case 5:
          JOptionPane.showMessageDialog(frame, "<html><center>¡¡PORCENTAJE BONO AUTOS ERRONEO O VACÍO!!<br>"
                  + "Renglon: " + (emfe.getRengFallo() + 1) + "<br>"
                  + "Columna: " + CellReference.convertNumToColString(emfe.getColFallo()) + "<br>"
                  + "En: " + emfe.getArchivoQueFallo().getName() + "<br>"
                  + "Revise y reintente.</center></html>");
          break;
            case 6:
          JOptionPane.showMessageDialog(frame, "<html><center>¡¡PORCENTAJE BONO DAÑOS  ERRONEO O VACÍO!!<br>"
                  + "Renglon: " + (emfe.getRengFallo() + 1) + "<br>"
                  + "Columna: " + CellReference.convertNumToColString(emfe.getColFallo()) + "<br>"
                  + "En: " + emfe.getArchivoQueFallo().getName() + "<br>"
                  + "Revise y reintente.</center></html>");
          break;
            case 7:
          JOptionPane.showMessageDialog(frame, "<html><center>¡¡PORCENTAJE BONO PERSONAS ERRONEO O VACÍO!!<br>"
                  + "Renglon: " + (emfe.getRengFallo() + 1) + "<br>"
                  + "Columna: " + CellReference.convertNumToColString(emfe.getColFallo()) + "<br>"
                  + "En: " + emfe.getArchivoQueFallo().getName() + "<br>"
                  + "Revise y reintente.</center></html>");
          break;
             case 8:
          JOptionPane.showMessageDialog(frame, "<html><center>¡¡RECHAZO ERRONEO!!<br>"
                  + "Renglon: " + (emfe.getRengFallo() + 1) + "<br>"
                  + "Columna: " + CellReference.convertNumToColString(emfe.getColFallo()) + "<br>"
                  + "En: " + emfe.getArchivoQueFallo().getName() + "<br>"
                  + "Revise y reintente.</center></html>");
          break;
        case 9:
          JOptionPane.showMessageDialog(frame, "<html><center>¡¡META DEL MES ERRONEA!!<br>"
                  + "Renglon: " + (emfe.getRengFallo() + 1) + "<br>"
                  + "Columna: " + CellReference.convertNumToColString(emfe.getColFallo()) + "<br>"
                  + "En: " + emfe.getArchivoQueFallo().getName() + "<br>"
                  + "Revise y reintente.</center></html>");
          break;
        case 22:
          JOptionPane.showMessageDialog(frame, "<html><center>¡¡MES/TRIMESTRE ERRONEO!!<br>"
                  + "Renglon: " + (emfe.getRengFallo() + 1) + "<br>"
                  + "Columna: " + CellReference.convertNumToColString(emfe.getColFallo()) + "<br>"
                  + "En: " + emfe.getArchivoQueFallo().getName() + "<br>"
                  + "Revise y reintente.</center></html>");
          break;
           case 23:
          JOptionPane.showMessageDialog(frame, "<html><center>¡¡AGENTE ADICIONAL 1 ERRONEO!!<br>"
                  + "Renglon: " + (emfe.getRengFallo() + 1) + "<br>"
                  + "Columna: " + CellReference.convertNumToColString(emfe.getColFallo()) + "<br>"
                  + "En: " + emfe.getArchivoQueFallo().getName() + "<br>"
                  + "Revise y reintente.</center></html>");
          break;
           case 24:
          JOptionPane.showMessageDialog(frame, "<html><center>¡¡AGENTE ADICIONAL 1 ERRONEO!!<br>"
                  + "Renglon: " + (emfe.getRengFallo() + 1) + "<br>"
                  + "Columna: " + CellReference.convertNumToColString(emfe.getColFallo()) + "<br>"
                  + "En: " + emfe.getArchivoQueFallo().getName() + "<br>"
                  + "Revise y reintente.</center></html>");
          break;
        default:
          JOptionPane.showMessageDialog(frame, "<html><center>¡¡Dato inesperado!!<br>"
                  + "Renglon: " + (emfe.getRengFallo() + 1) + "<br>"
                  + "Columna: " + CellReference.convertNumToColString(emfe.getColFallo()) + "<br>"
                  + "En: " + emfe.getArchivoQueFallo().getName() + "<br>"
                  + "Revise y reintente.</center></html>");
          break;
      }
    } else if (emfe.getCodigoFallo() == ExcelMalFormadoException.FALTA_COLUMNA) {
      JOptionPane.showMessageDialog(frame, "<html><center>¡¡Falta una columna!!<br>"
              + "En: " + emfe.getArchivoQueFallo().getName() + "<br>"
              + "Revise y reintente.</center></html>");
    } else if (emfe.getCodigoFallo() == ExcelMalFormadoException.TIPO_INESPERADO) {
      JOptionPane.showMessageDialog(frame, "<html><center>¡¡Tipo inesperado en la celda!!<br>"
              + "Renglon: " + (emfe.getRengFallo() + 1) + "<br>"
              + "Columna: " + CellReference.convertNumToColString(emfe.getColFallo()) + "<br>"
              + "En: " + emfe.getArchivoQueFallo().getName() + "<br>"
              + "Revise y reintente.</center></html>");
    } else if (emfe.getCodigoFallo() == ExcelMalFormadoException.RENGLON_VACIO) {
      JOptionPane.showMessageDialog(frame, "<html><center>¡¡Hubo un renglon vacío!!<br>"
              + "Renglon: " + CellReference.convertNumToColString(emfe.getRengFallo()) + "<br>"
              + "En: " + emfe.getArchivoQueFallo().getName() + "<br>"
              + "Revise y reintente.</center></html>");
    } else if (emfe.getCodigoFallo() == ExcelMalFormadoException.MES_NO_ENCONTRADO) {
      JOptionPane.showMessageDialog(frame, "<html><center>¡¡No se encontraron registros del mes seleccionado!!<br>"
              + "En: " + emfe.getArchivoQueFallo().getName() + "<br>"
              + "Revise y reintente.</center></html>");
    }
  }

  public class AjusteComboBoxModel extends DefaultComboBoxModel {

    String[] elementosCombo = new String[13];
    int selectedIndex = 0;

    public AjusteComboBoxModel(boolean ajuste) {
      super();
      elementosCombo[0] = "Seleccione el mes...";
      elementosCombo[1] = "Enero";
      elementosCombo[2] = "Febrero";
      elementosCombo[4] = "Abril";
      elementosCombo[5] = "Mayo";
      elementosCombo[7] = "Julio";
      elementosCombo[8] = "Agosto";
      elementosCombo[10] = "Octubre";
      elementosCombo[11] = "Noviembre";

      if (ajuste) {
        elementosCombo[3] = "Marzo";
        elementosCombo[6] = "Junio";
        elementosCombo[9] = "Septiembre";
        elementosCombo[12] = "Dicimebre";
      } else {
        elementosCombo[3] = "Primer Trimestre";
        elementosCombo[6] = "Segundo Trimestre";
        elementosCombo[9] = "Tercer Trimestre";
        elementosCombo[12] = "Cuarto Trimestre";
      }
    }

    public void setSelectedItem(Object anItem) {
      String mes = (String) anItem;
      for (int i = 0; i < elementosCombo.length; i++) {
        if (elementosCombo[i].equals(mes)) {
          selectedIndex = i;
          return;
        }
      }
      selectedIndex = 0;
    }

    public Object getSelectedItem() {
      return elementosCombo[selectedIndex];
    }

    public int getSize() {
      return elementosCombo.length;
    }

    public Object getElementAt(int index) {
      return elementosCombo[index];
    }
  }

  private void formWindowClosing(java.awt.event.WindowEvent evt) {
    System.exit(0);
  }
  // Variables declaration - do not modify//GEN-BEGIN:variables
  private javax.swing.JButton botonCalcular;
  private javax.swing.JButton botonExplorarBaseDeDatos;
  private javax.swing.JButton botonExplorarCondiciones;
  private javax.swing.JButton botonSalir;
  private javax.swing.JTextField campoPathBaseDeDatos;
  private javax.swing.JTextField campoPathCondiciones;
  private javax.swing.JCheckBox checkBoxAjusteAnual;
  private javax.swing.JComboBox comboMes;
  private javax.swing.JLabel etiquetaBaseDeDatos;
  private javax.swing.JLabel etiquetaCondiciones;
  private javax.swing.JLabel etiquetaEspecificaBaseDDatos;
  private javax.swing.JLabel etiquetaEspecificaCondiciones;
  private javax.swing.JLabel etiquetaMes;
  private javax.swing.JLabel etiquetaTitulo;
  private javax.swing.JLabel infoEstado;
  private javax.swing.JPanel mainPanel;
  private javax.swing.JPanel panelBaseDeDatos;
  private javax.swing.JPanel panelCondiciones;
  private javax.swing.JPanel panelMes;
  // End of variables declaration//GEN-END:variables
}
